package provatable;

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the GRUPPO database table.
 * 
 */
@Entity
@NamedQuery(name="Gruppo.findAll", query="SELECT g FROM Gruppo g")
public class Gruppo implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	private long oid;

	private String biografia;

	private BigDecimal coverband;

	@Temporal(TemporalType.DATE)
	@Column(name="\"DATA\"")
	private Date data;

	private String luogo;

	//bi-directional many-to-one association to Cachet
	@OneToMany(mappedBy="gruppo")
	private List<Cachet> cachets;

	//bi-directional many-to-one association to Album
	@ManyToOne
	private Album album;

	//bi-directional many-to-one association to Feedback
	@ManyToOne
	private Feedback feedback;

	//bi-directional many-to-one association to GruppiDiRiferimento
	@ManyToOne
	@JoinColumn(name="GRUPPI_DI_RIFERIMENTO_OID")
	private GruppiDiRiferimento gruppiDiRiferimento;

	//bi-directional many-to-one association to Service
	@ManyToOne
	private Service service;

	//bi-directional many-to-many association to Componente
	@ManyToMany
	@JoinTable(
		name="GRUPPO_COMPONENTE"
		, joinColumns={
			@JoinColumn(name="GRUPPO_OID")
			}
		, inverseJoinColumns={
			@JoinColumn(name="COMPONENTE_OID")
			}
		)
	private List<Componente> componentes;

	//bi-directional many-to-many association to Evento
	@ManyToMany
	@JoinTable(
		name="GRUPPO_EVENTO"
		, joinColumns={
			@JoinColumn(name="GRUPPO_OID")
			}
		, inverseJoinColumns={
			@JoinColumn(name="EVENTO_OID")
			}
		)
	private List<Evento> eventos;

	//bi-directional many-to-many association to TipologiaEvento
	@ManyToMany
	@JoinTable(
		name="GRUPPO_TIPOLOGIA_EVENTO"
		, joinColumns={
			@JoinColumn(name="GRUPPO_OID")
			}
		, inverseJoinColumns={
			@JoinColumn(name="TIPOLOGIA_EVENTO_OID")
			}
		)
	private List<TipologiaEvento> tipologiaEventos;

	//bi-directional many-to-many association to Tour
	@ManyToMany
	@JoinTable(
		name="GRUPPO_TOUR"
		, joinColumns={
			@JoinColumn(name="GRUPPO_OID")
			}
		, inverseJoinColumns={
			@JoinColumn(name="TOUR_OID")
			}
		)
	private List<Tour> tours;

	//bi-directional many-to-many association to Locale
	@ManyToMany(mappedBy="gruppos")
	private List<Locale> locales;

	//bi-directional many-to-one association to Scaletta
	@OneToMany(mappedBy="gruppo")
	private List<Scaletta> scalettas;

	//bi-directional many-to-one association to User
	@OneToMany(mappedBy="gruppo")
	private List<User> users;

	public Gruppo() {
	}

	public long getOid() {
		return this.oid;
	}

	public void setOid(long oid) {
		this.oid = oid;
	}

	public String getBiografia() {
		return this.biografia;
	}

	public void setBiografia(String biografia) {
		this.biografia = biografia;
	}

	public BigDecimal getCoverband() {
		return this.coverband;
	}

	public void setCoverband(BigDecimal coverband) {
		this.coverband = coverband;
	}

	public Date getData() {
		return this.data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getLuogo() {
		return this.luogo;
	}

	public void setLuogo(String luogo) {
		this.luogo = luogo;
	}

	public List<Cachet> getCachets() {
		return this.cachets;
	}

	public void setCachets(List<Cachet> cachets) {
		this.cachets = cachets;
	}

	public Cachet addCachet(Cachet cachet) {
		getCachets().add(cachet);
		cachet.setGruppo(this);

		return cachet;
	}

	public Cachet removeCachet(Cachet cachet) {
		getCachets().remove(cachet);
		cachet.setGruppo(null);

		return cachet;
	}

	public Album getAlbum() {
		return this.album;
	}

	public void setAlbum(Album album) {
		this.album = album;
	}

	public Feedback getFeedback() {
		return this.feedback;
	}

	public void setFeedback(Feedback feedback) {
		this.feedback = feedback;
	}

	public GruppiDiRiferimento getGruppiDiRiferimento() {
		return this.gruppiDiRiferimento;
	}

	public void setGruppiDiRiferimento(GruppiDiRiferimento gruppiDiRiferimento) {
		this.gruppiDiRiferimento = gruppiDiRiferimento;
	}

	public Service getService() {
		return this.service;
	}

	public void setService(Service service) {
		this.service = service;
	}

	public List<Componente> getComponentes() {
		return this.componentes;
	}

	public void setComponentes(List<Componente> componentes) {
		this.componentes = componentes;
	}

	public List<Evento> getEventos() {
		return this.eventos;
	}

	public void setEventos(List<Evento> eventos) {
		this.eventos = eventos;
	}

	public List<TipologiaEvento> getTipologiaEventos() {
		return this.tipologiaEventos;
	}

	public void setTipologiaEventos(List<TipologiaEvento> tipologiaEventos) {
		this.tipologiaEventos = tipologiaEventos;
	}

	public List<Tour> getTours() {
		return this.tours;
	}

	public void setTours(List<Tour> tours) {
		this.tours = tours;
	}

	public List<Locale> getLocales() {
		return this.locales;
	}

	public void setLocales(List<Locale> locales) {
		this.locales = locales;
	}

	public List<Scaletta> getScalettas() {
		return this.scalettas;
	}

	public void setScalettas(List<Scaletta> scalettas) {
		this.scalettas = scalettas;
	}

	public Scaletta addScaletta(Scaletta scaletta) {
		getScalettas().add(scaletta);
		scaletta.setGruppo(this);

		return scaletta;
	}

	public Scaletta removeScaletta(Scaletta scaletta) {
		getScalettas().remove(scaletta);
		scaletta.setGruppo(null);

		return scaletta;
	}

	public List<User> getUsers() {
		return this.users;
	}

	public void setUsers(List<User> users) {
		this.users = users;
	}

	public User addUser(User user) {
		getUsers().add(user);
		user.setGruppo(this);

		return user;
	}

	public User removeUser(User user) {
		getUsers().remove(user);
		user.setGruppo(null);

		return user;
	}

}